package com.xxxx.seckill.utils;

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Component;

/**
 * MD5工具类
 * 思路：MD5(MD5(pass明文+固定salt)+salt)
 *
 * @author FYM
 * @data 2022/3/18 21:33
 */
@Component
public class MD5Util {
    /**
     * md5加密
     *
     * @param src
     * @return
     */
    public static String md5(String src) {
        return DigestUtils.md5Hex(src);
    }

    /**
     * MD5加盐
     */
    private static final String salt = "1a2b3c4d";


    /**
     * 第一次加密 接收前端
     *
     * @param inputPass
     * @return
     */
    public static String inputPassToFromPass(String inputPass) {
        String str = "" + salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4);
        return md5(str);
    }

    /**
     * 第二次加密 后端到数据库
     *
     * @param formPass
     * @param salt     存在数据库中的盐
     * @return
     */
    public static String formPassToDBPass(String formPass, String salt) {
        String str = salt.charAt(0) + salt.charAt(2) + formPass + salt.charAt(5) + salt.charAt(4);
        return md5(str);
    }

    //后端真正需要调用的方法
    public static String inputPassToDBPass(String inputPass, String salt) {
        String fromPass = inputPassToFromPass(inputPass);
        String dbPass = formPassToDBPass(fromPass, salt);
        return dbPass;
    }

    public static void main(String[] args) {
        //前端参数
        System.out.println(inputPassToFromPass("112233"));//af37db671aa2c726be5fb813b74c7ebd

        //后端加密,这里的盐表示二次加密的盐
        System.out.println(formPassToDBPass("af37db671aa2c726be5fb813b74c7ebd", "1a2b3c4d"));

        System.out.println(inputPassToDBPass("112233","1a2b3c4d"));

    }

}
